package org.example.serviceoffice.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.example.model.manage.bean.po.Counselor;
import org.example.model.manage.bean.po.Faculty;
import org.example.model.manage.bean.po.Office;
import org.example.model.manage.bean.po.Major;
import org.example.model.manage.bean.po.Student;
import org.example.model.manage.bean.po.security.User;
import org.example.model.manage.bean.vo.FacultyCount;
import org.example.model.manage.bean.vo.SchoolCount;
import org.example.model.manage.bean.vo.MajorCount;
import org.example.model.manage.bean.vo.MajorImportResult;
import org.springframework.web.multipart.MultipartFile;
import org.example.serviceoffice.vo.PageResult;
import org.example.serviceoffice.vo.StudentListVO;
import org.example.serviceoffice.vo.CounselorWithMajorVO;

import java.util.List;

public interface OfficeService extends IService<Office> {
    List<FacultyCount> getFacultyCounts();
    SchoolCount getSchoolCount();
    List<FacultyCount> getFacultyList();
    List<MajorCount> getMajorReportListByFaculty(Integer facultyId);

    /**
     * 添加学生信息
     * @param student 学生信息对象
     * @return 添加后的学生信息
     */
    Student addStudent(Student student);

    /**
     * 根据名称查找学院
     * @param name 学院名称
     * @return 学院信息
     */
    Faculty getFacultyByName(String name);

    /**
     * 创建学院
     * @param faculty 学院信息
     * @return 创建后的学院信息
     */
    Faculty createFaculty(Faculty faculty);

    /**
     * 根据ID查找辅导员
     * @param id 辅导员ID
     * @return 辅导员信息
     */
    Counselor getCounselorById(Integer id);

    /**
     * 创建辅导员
     * @param counselor 辅导员信息
     * @return 创建后的辅导员信息
     */
    Counselor createCounselor(Counselor counselor);

    /**
     * 创建用户
     * @param user 用户信息
     * @return 创建后的用户信息
     */
    User createUser(User user);

    /**
     * 根据ID查找学院
     * @param id 学院ID
     * @return 学院信息
     */
    Faculty getFacultyById(Integer id);

    /**
     * 根据CSV文件导入辅导员信息
     * @param file CSV文件
     * @return 导入结果
     */
    String importCounselorsFromCsv(MultipartFile file);

    /**
     * 根据CSV文件导入学生信息
     * @param file CSV文件
     * @return 导入结果
     */
    String importStudentsFromCsv(MultipartFile file);

    /**
     * 根据CSV文件导入学院信息
     * @param file CSV文件
     * @return 导入结果
     */
    String importFacultiesFromCsv(MultipartFile file);

    /**
     * 根据CSV文件导入专业信息
     * @param file CSV文件
     * @return 导入结果
     */
    MajorImportResult importMajorsFromCsv(MultipartFile file);

    PageResult<org.example.model.manage.bean.po.Student> getStudentPage(int page, int size);
    PageResult<StudentListVO> getStudentWithMajorNamePage(int page, int size);
    PageResult<org.example.model.manage.bean.po.Counselor> getCounselorPage(int page, int size);
    PageResult<CounselorWithMajorVO> getCounselorWithMajorPage(int page, int size);

    /**
     * 创建专业
     * @param major 专业信息
     * @return 创建后的专业信息
     */
    Major createMajor(Major major);

    /**
     * 根据专业名字和学院ID查找专业
     * @param majorName 专业名字
     * @param facultyId 学院ID
     * @return 专业信息
     */
    Major getMajorByNameAndFacultyId(String majorName, Integer facultyId);

    /**
     * 根据ID删除学院
     * @param id 学院ID
     * @return 删除结果
     */
    boolean deleteFacultyById(Integer id);

    /**
     * 根据ID删除专业
     * @param id 专业ID
     * @return 删除结果
     */
    boolean deleteMajorById(Integer id);

    /**
     * 根据ID删除辅导员
     * @param id 辅导员ID
     * @return 删除结果
     */
    boolean deleteCounselorById(Integer id);
}